#include "main.h"
#include "leds.h"
#include "timer.h"
#include "uart.h"
#include "key.h"
#include "adc.h"
#include "buzzer.h"
#include "samples.h"
#include "AIC32.h"
#include "bsp_xintf.h"
#include "math.h"
#include "bsp_iir.h"
#include "smg.h"


int iir_index=0;
unsigned char seg_buff[4]={0xff,0xff,0xff,0xff};

/**
 * TODO��ϵͳ��ʼ�����������úõģ���������Ҫȥ����
 */
void SystemInit()
{
  InitSysCtrl();
  InitPieCtrl();
  IER = 0x0000;
  IFR = 0x0000;
  InitPieVectTable();


}

void IIR_init();

/**
 * TODO�������ʼ�����й�������ĳ�ʼ��������������
 */
void PeripheralInit()
{

  LED_Init();

  DMAInitialize();
  init_zone7();


  IIR_init();

  //TIM0���÷�ƵΪ150����������Ƶ��Ϊ1Mhz���ж�ÿ1ms����������ʵ�����жϱ�־λ
  TIM0_Init(150, 1000);

  //SCIA(UARTA) ���ò�����Ϊ115200
  UARTa_Init(230400);

  //������̳�ʼ��
  KEY_Init();

  ADC_Init();
  sample_init(44100);
  
  BUZZER_Init();
  BUZZER_OFF;

  AIC23_Init();

  SMG_Init();


  //��ӡ��ʼ�������Ϣ
  UARTa_printf("��ʼ�����\n");
  UARTa_printf("��ʼ����\n");
}

extern float IIR_input[];
extern volatile Uint16 iir_mode;

/**
 * TODO��������
 */
void main()
{
  int temp, y;
  Uint32 i;
  SystemInit();
  PeripheralInit();

  // �������ʾ OFF
  seg_buff[1]=0xC0;
  seg_buff[2]=0x8E;
  seg_buff[3]=0x8E;
  while (1)
  {
    if (adc_simple_done)
    {
      //����������жϣ����ڴ���Ⱥ����ֵ
      adc_simple_done = 0;
      adc_simple_done_callback();
    }
    if (bMS1Chg)
    {
      // 1ms���жϣ�ÿ1ms����һ��
      bMS1Chg = 0; //��־λ����

      // ���ڲ��δ�ӡ���ô���ʾ����app���Կ�������
      if (MS1 % 2 == 0)
      {
        UARTa_printf("%d\r\n", outputvalue);
      }

      // �����ɨ���������̬����ܵı���
      SMG_DisplayBuff(seg_buff[0],seg_buff[1], seg_buff[2], seg_buff[3]);

    }
    if (bMS10Chg)
    {
      // 10ms���жϣ�ÿ10ms����һ��
      //�������������趨ÿ50msִ��һ��ɨ�貢����
      if (MS10 % 5 == 0)
        Key_Task();


      bMS10Chg = 0; //��־λ����
    }
    if (bMS100Chg)
    {
      // 100ms���жϣ�ÿ100ms����һ��
      bMS100Chg = 0; //��־λ����

    }
    if (bSecChg)
    {
      // 1s���жϣ�ÿ1s����һ��
      LED8_TOGGLE;
      bSecChg = 0; //��־λ����
    }
  }
}

/*
 * TODO������������ж�
 */
void adc_simple_done_callback()
{
  UARTa_printf("�������\n");
}

extern unsigned char smgduan[16];

/**
 * TODO��������������
 */
void Key_Task()
{
  // ����ɨ��
  uint8_t ensure = KEY_Scan(0);
  int temp, y, i;

  //������������ɨ��Ĳ���
  switch (ensure)
  {
    case KEY1_PRESS:
      // ������1���£�
      //���˲���
      iir_mode=0;
      //�������ʾ�� ��1 ON��
      seg_buff[0]=smgduan[0+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      //�˲����л�Ϊ�˲���1
      IIR_SwitchFilter(0);
      break;
    case KEY2_PRESS:
      //���������1һ�������������
      iir_mode=0;
      seg_buff[0]=smgduan[1+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      IIR_SwitchFilter(1);
      break;
    case KEY3_PRESS:
      iir_mode=0;
      seg_buff[0]=smgduan[2+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      IIR_SwitchFilter(2);
      break;
    case KEY4_PRESS:
      iir_mode=0;
      seg_buff[0]=smgduan[3+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      IIR_SwitchFilter(3);
      break;
    case KEY5_PRESS:
      iir_mode=0;
      seg_buff[0]=smgduan[4+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      IIR_SwitchFilter(4);
      break;
    case KEY6_PRESS:
      iir_mode=0;
      seg_buff[0]=smgduan[5+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      IIR_SwitchFilter(5);
      break;
    case KEY7_PRESS:
      iir_mode=0;
      seg_buff[0]=smgduan[6+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      IIR_SwitchFilter(6);
      break;
    case KEY8_PRESS:
      iir_mode=0;
      seg_buff[0]=smgduan[7+1];
      seg_buff[1]=0xFF;
      seg_buff[2]=0xC0;
      seg_buff[3]=0xC8;
      IIR_SwitchFilter(7);
      break;
    case KEY9_PRESS:
      iir_mode=1;
      seg_buff[0]=0xff;
      seg_buff[1]=0xC0;
      seg_buff[2]=0x8E;
      seg_buff[3]=0x8E;
      break;
    default:
  }
  if (ensure != KEY_UNPRESS)
  {
    int i;
    UARTa_printf("KEY Press:%d\n", ensure);
    for (i = 0; i < 50; ++i)
    {
      BUZZER_TOGGLE;
      DELAY_US(300);
    }
  }
} 
